package com.anjiplus.template.gaea.business.GeneralToolService.impl;

import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSONObject;
import com.anjiplus.template.gaea.business.GeneralToolService.GeneralUtilService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

@Service
public class GeneralUtilServiceImpl implements GeneralUtilService {
    @Value(value = "${spring.datasource.GSYY}")
    private String GSYY;

    @Value(value = "${spring.datasource.oracleBip}")
    private String oracleBIP;

    /**
     * 获取所有往来单位
     *
     * @param jdbcTemplate
     * @return
     */
    @Override
    public List<Map<String, Object>> getContactUnits(JdbcTemplate jdbcTemplate) {
        String tsSql = "select * from " + GSYY + ".GS_CONTACT_UNITS where DELETE_STATE = 0";
        return jdbcTemplate.queryForList(tsSql);
    }

    /**
     * 往来单位过滤
     *
     * @param query
     * @param units
     * @return
     */
    @Override
    public List<JSONObject> filterDuplicates(List<JSONObject> query, List<Map<String, Object>> units) {
        // 提取 units 中的关键字段集合，用于快速查找
        Set<String> unitKeys = units.stream()
                .map(GeneralUtilServiceImpl::extractKey) // 假设每个单位有一个唯一标识字段
                .collect(Collectors.toSet());

        // 过滤 query 中的数据
        return query.stream()
                .filter(entity -> !unitKeys.contains(extractKey(entity))) // 检查 entity 是否存在于 unitKeys 中
                .collect(Collectors.toList());
    }

    /**
     * 查询核算项目
     *
     * @param jdbcTemplate
     * @return
     */
    @Override
    public List<Map<String, Object>> getAssets(JdbcTemplate jdbcTemplate) {
        String tsSql = "select * from " + GSYY + ".GS_PROJECT_MAPPING";
        return jdbcTemplate.queryForList(tsSql);
    }

    /**
     * 用友数据库配置连接
     * @return
     */
    @Override
    public Map<String, Object> getYYJDBC() {
        JdbcTemplate jdbcTemplate = SpringUtil.getBean(JdbcTemplate.class);
        String sql = "select * from " + GSYY + ".jdbc_util where code = '002'";
        Map<String, Object> jdbcObjectMap = jdbcTemplate.queryForMap(sql);
        return jdbcObjectMap;
    }

    /**
     * 获取用友库名
     * @return
     */
    @Override
    public String getOracle() {
        return oracleBIP;
    }

    // 提取 JSONObject 的唯一标识字段（用友往来往来单位的社会信用代码）
    private static String extractKey(JSONObject entity) {
        String value = entity.getString("ORGANIZATIONCODE");
        return (value == null || value.isEmpty()) ? "" : value;
    }

    // 提取 Map 的唯一标识字段（GSYY公共往来社会信用代码）
    private static String extractKey(Map<String, Object> unit) {
        return String.valueOf(unit.get("SOCIAL_CREDIT_CODE"));
    }
}
